/**
 * 
 * 全局导航守卫 
 * 
 * 导航守卫主要用来通过跳转或取消的方式守卫导航
 * 守卫是异步解析执行，此时导航在所有守卫 resolve 完之前一直处于等待中。
 */

// 可以做一些拦截啥的
export const useNavigationGuards = (router: any) => {
  // 使用 router.beforeEach 注册一个全局前置守卫
  // to:即将要进入的目标
  // from:当前导航正要离开的路由
  // next: 可选的第三个参数
  router.beforeEach((to: any, from: any, next: any) => {
    if (to.name !== 'Login') {
      // 登录
      const isAuthenticated = __STORAGE__.get('USER_ID')
      if (isAuthenticated) {
        // 路由不存在
        if (!to.path) {
          next({ name: "NotFound" });
        } else {
          next()
        }
      } else {
        next({ name: "Login" });
      }
    } else {
      // 退出登录
      __STORAGE__.remove('USER_ID')
      next();
    }
  });
  // 你也可以注册全局后置钩子
  router.afterEach(() => {
    // 切换路由时 滚动至顶部
    const APP_MAIN = document.querySelector(".app-main");
    if (APP_MAIN) {
      // eslint-disable-next-line no-unused-expressions
      APP_MAIN.scrollTo && APP_MAIN.scrollTo(0, 0);
    }

  });
  return router;
};
